package com.ww.basic.oop

/**
 * 辅助构造器
 * Scala强制规定：辅助构造器的第一行有效语句必须调用主构造器或者其他辅助构造器
 *
 * 在类中定义的var字段将会映射到一个private字段声明，并附带相应的getter和setter方法
 */

class Person2(val firstName: String, val lastName: String) {
  /**
   * 这里使用下划线初始化var变量，因为Scala要求变量在使用前必须初始化，下划线表示相应类型的默认值
   */
  var position: String = _

  println(s"Creating $toString")

  def this(firstName: String, lastName: String, positionHeld: String) = {
    this(firstName, lastName)
    position = positionHeld
  }

  override def toString: String = {
    s"$firstName $lastName holds $position position"
  }
}

object Test3 {
  def main(args: Array[String]): Unit = {
    val john = new Person2("John", "Smith", "Analyst")
    println(john)
    println("------------------")
    val bill = new Person2("Bill", "Walker")
    println(bill)
  }
}